package slave;

import javax.bluetooth.BluetoothStateException;

import com.intel.bluetooth.BlueCoveImpl;

/**
 * Questa classe "SINGLETON" è utilizzata per restituire ad ogni thread di trasmissione
 * lo stack bluetooth che dovrà utilizzare(Limite di 7 client per STACK).
 * Lo stack può venir istanziato una sola volta, nel caso sia già 
 * dovrà esserne passato il riferimento.
 * @author alex
 */

public class BluetoothStack {

	private static BluetoothStack instance;
	private String main=null;
	private String helper=null;
	private Object bluez_main = null;
	private Object bluez_helper = null;
	private boolean mainSet = false;
	private boolean helperSet = false;

	
	private BluetoothStack(){
	}

	public static BluetoothStack getInstance(){
		if (instance == null){
			instance = new BluetoothStack();
		}
		return instance;
	}
	//Associo a main ed helper i device locali che dovranno utilizzare
	//Default: main=0,helper=1  
	public synchronized String chooseStackDevice(String device){
		if(device.equals("main") && !mainSet){
			BlueCoveImpl.setConfigProperty("bluecove.deviceID",main);	
			Object id = null;
			try {
				id = BlueCoveImpl.getThreadBluetoothStackID();
			} catch (BluetoothStateException e) {
				e.printStackTrace();
			}
			setId(id,device);
			mainSet = true;
		} 
		if(device.equals("helper") && !helperSet){
			BlueCoveImpl.setConfigProperty("bluecove.deviceID",helper);	
			Object id = null;
			try {
				id = BlueCoveImpl.getThreadBluetoothStackID();
			} catch (BluetoothStateException e) {
				e.printStackTrace();
			}
			setId(id,device);
			helperSet = true;
		}
		return null;			
	}  

	public void setId(Object id, String stack) {
		if(stack.equals("main")){
			this.bluez_main=id;	
		}
		else this.bluez_helper=id;
	}

	public Object getId(String stack) {
		if(stack.equals("main")){
			return bluez_main;	
		}
		else return bluez_helper;
	}
//Metodo utilizzato per settare in fase di boot il device principale per la trasmissione.
	public void setMain(String main) {
		this.main = main;
	}
//Metodo utilizzato per settare in fase di boot il device secondario per la trasmissione.
	public void setHelper(String helper) {
		this.helper = helper;
	}
}
